/**
 * singleton
 *
 * @file 基础单例模式
 * */

/**
 * Singleton - 基础单例基类
 *
 * @class
 * @extends Object
 * */
export const Singleton = function (attr = void 0) {
    return {
        /**
         * attr - 设置的单例
         *
         * @type { any }
         * @memberOf Singleton
         * */
        attr: attr,
        /**
         * set - 设置单例
         *
         * @function
         * @param { any } newAttr - 设置的单例
         * @return { boolean } 是否成功设置单例
         * @memberOf Singleton
         * */
        set: newAttr => {
            if (this.attr === void 0) {
                this.attr = newAttr;
                return true;
            }

            return false;
        },
        /**
         * get - 获取单例
         *
         * @function
         * @return { any } 单例对象
         * @memberOf Singleton
         * */
        get: () => {
            return this.attr;
        }
    }
}

export default Singleton;
